package situ.com.musicplayer;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Message;
import android.support.annotation.Nullable;
import android.util.EventLogTags;
import android.util.Log;

import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;

/**
 * Created by Gao on 2020/11/28.
 */
public class MusicService extends Service{
    private static final String TAG = "MusicService";
    // Android提供了一个播放器，实现音乐的播放，暂停等功能
    private MediaPlayer mMediaPayer;
    // 定时器
    private Timer mTimer;

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "onCreate()");
        mMediaPayer = new MediaPlayer();
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return new MusicControll();
    }

    // 这里提供的功能，是给Activity调用使用的
    class MusicControll extends Binder{
        // 设置文件的播放路径
        public void init(String path){
            Log.d(TAG, "init()");
            try {
                mMediaPayer.reset();
                // 设置要播放的路径
                mMediaPayer.setDataSource(path);
                mMediaPayer.prepare();
                mMediaPayer.start();
                // 开启定时器，刷新播放进度
                addTimer();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        // 播放
        public void play() {
            if (mMediaPayer.isPlaying() == false){
                mMediaPayer.start();
            }
        }

        // 暂停
        public void pause() {
            if (mMediaPayer.isPlaying()) {
                mMediaPayer.pause();
            }
        }

        // 返回当前的播放状态
        public boolean isPlaying() {
            return mMediaPayer.isPlaying();
        }

        // 设置音乐播放位置
        public void seekTo(int progress) {
            mMediaPayer.seekTo(progress);
        }
    }


    // 添加定时器，用于更新SeekBar的播放进度
    public void addTimer() {
        if (mTimer == null) {
            mTimer = new Timer();
            // 定时任务
            TimerTask task = new TimerTask() {

                @Override
                public void run() {
                    // 如果已经播放结束，直接退出
                    if (mMediaPayer == null) {
                        return;
                    }
                    // 获取歌曲的总长度
                    int duration = mMediaPayer.getDuration();
                    // 获取当前的播放进度
                    int currentPosition = mMediaPayer.getCurrentPosition();
                    Message message = MusicPlayerActivity.handler.obtainMessage();
                    // 将音乐的总时长和已经播放的时长放到Message
                    Bundle bundle = new Bundle();
                    bundle.putInt("duration", duration);
                    bundle.putInt("currentPosition", currentPosition);
                    message.setData(bundle);
                    MusicPlayerActivity.handler.sendMessage(message);
                }
            };
            // 开启任务后延迟5毫秒执行第一次任务，以后每500毫秒再执行task任务
            mTimer.schedule(task, 5, 500);
        }
    }

    @Override
    public boolean onUnbind(Intent intent) {
        System.out.println("MusicService.onUnbind()");
        return super.onUnbind(intent);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        System.out.println("MusicService.onDestroy()");
        // 如果已经关闭，就不需要做处理
        if (mMediaPayer == null) {
            return;
        }

        // 如果正在循环播放，首先停止这个音乐
        if (mMediaPayer.isLooping()) {
            mMediaPayer.stop();
        }

        // 释放资源
        mMediaPayer.release();
        mMediaPayer = null;

    }
}
